package models;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;

public class Resultado   {

	private static Connection conexao;
	private static Statement comando;
	
	
	
	/***********************************************************************************/
	
	protected static void conectar() throws SQLException {  
		try {
			Class.forName("org.postgresql.Driver");
		} catch (ClassNotFoundException e) {
		}

			conexao = DriverManager.getConnection(  
			        "jdbc:postgresql://localhost:5432/SGRv2",  
			        "postgres",  
			        "senha");
		
			comando =  conexao.createStatement();
	}

	/***********************************************************************************/
		
		  int idbarco;
	      int pontuacaototal;
	      String nomebarco;
	      
	      	public int getidbarco() {
				return idbarco;
			}
			public void setidbarco(int idbarco) {
				this.idbarco = idbarco;
			}
			
			public int getpontuacaototal() {
				return pontuacaototal;
			}
			public void setpontuacaototal(int pontuacaototal ) {
				this.pontuacaototal = pontuacaototal ;
			}
			
			public String getnomebarco() {
				return nomebarco;
			}
			public void setnomebarco(String nomebarco) {
				this.nomebarco = nomebarco;
			}
			
			/*********************************************************************************/
			
			public static List<Resultado> Resultados(int idcompeticao ) throws SQLException
			{
				conectar();
		    	
		    	ResultSet reader = comando.executeQuery("select * from rodada join regata on rodada.id = regata.idrodada join pontuacao on pontuacao.idregata = regata.id where idcompeticao = " + idcompeticao + "order by pontuacao desc" );
		    	  
				//ResultSet reader = comando.executeQuery("select sum(pontuacao.pontuacao) as pontuacao, idbarco from rodada join regata on rodada.id = regata.idrodada " +
			    //"join pontuacao on pontuacao.idregata = regata.id " +
			    //"where idcompeticao = "+ idcompeticao + " group by idbarco");
				
				List<Resultado> Resultados = new ArrayList<Resultado>();
				
				List<Barco> Barcos = new ArrayList<Barco>();
				Barcos = Barco.recuperarBarcos();
				
				 while (reader.next())
			        {
					 Resultado novo = new Resultado();
					 
			            try
			            {
			                novo.setidbarco(((int)reader.getInt("idbarco") ));
			                for(Barco x : Barcos) {
				                if(x.id == novo.idbarco) {
				                	novo.setnomebarco(x.nome);
				                	break;
				                }
			                }
			            }
			            catch (Exception e) {
						}
			            try
			            {
			                novo.setpontuacaototal((int)reader.getInt("pontuacao"));
			            }
			            catch (Exception e) {
						}			            			          
			            
			            Resultados.add(novo);
			        }
				 reader.close();
				 
				return Resultados;
			}
			
			/*********************************************************************************/
			
			public static int PiorResultado(int idbarco, int idcompeticao ) throws SQLException
			{
				conectar();
		    	
		    	ResultSet reader = comando.executeQuery("select min(pontuacao) as pior from rodada join regata on rodada.id = regata.idrodada join pontuacao on pontuacao.idregata = regata.id where idcompeticao = "+ idcompeticao + " and idbarco = " + idbarco);
			
				 int pior = 0;
				 
				 while (reader.next())
			        {					 
					  pior = ((int)reader.getInt("pior") );
			        }
				 reader.close();
				return pior;
			}
			
			/*********************************************************************************/
			
			public static List<Resultado> ResultadosClasse(int idcompeticao, int idclasse ) throws SQLException
			{
				conectar();
		    	
		    	ResultSet reader = comando.executeQuery("select * from rodada join regata on rodada.id = regata.idrodada " +
		    											"join pontuacao on pontuacao.idregata = regata.id " +
		    											"join barco on barco.idbarco = pontuacao.idbarco " +
		    											"where idcompeticao = " + idcompeticao + " and idclasse = " + idclasse + "order by pontuacao desc" );
		    	  
		    	
				//ResultSet reader = comando.executeQuery("select sum(pontuacao) as pontuacao, barco.idbarco from rodada join regata on rodada.id = regata.idrodada " +
			     //"join pontuacao on pontuacao.idregata = regata.id " +
			     //"join barco on barco.idbarco = pontuacao.idbarco " +
			     //"where idcompeticao = "+ idcompeticao + " and idclasse = "+ idclasse + " group by barco.idbarco ");
		    			    	
		    	
				List<Resultado> Resultados = new ArrayList<Resultado>();
				
				List<Barco> Barcos = new ArrayList<Barco>();
				Barcos = Barco.recuperarBarcos();
				
				 while (reader.next())
			        {
					 Resultado novo = new Resultado();
					 
			            try
			            {
			                novo.setidbarco(((int)reader.getInt("idbarco") ));
			                for(Barco x : Barcos) {
				                if(x.id == novo.idbarco) {
				                	novo.setnomebarco(x.nome);
				                	break;
				                }
			                }
			            }
			            catch (Exception e) {
						}
			            try
			            {
			                novo.setpontuacaototal((int)reader.getInt("pontuacao"));
			            }
			            catch (Exception e) {
						}			            			          
			            
			            Resultados.add(novo);
			        }
				 reader.close();
				 
				return Resultados;
			}
			
			/*********************************************************************************/
			
			
			public static List<Resultado> RemoverPioresResultados(List<Barco> barcosParticipantes, List<Resultado> Resultados ) throws SQLException {
					
				//PARA CADA BARCO
				for(Barco barc : barcosParticipantes) {
					int menor = 99999;
					int contador = 0;
					int indice = -1;
					//PARA CADA RESULTADO, REMOVE O PIOR
					for(Resultado x : Resultados) {
						if( x.getidbarco() == barc.getid() ){
							if(x.getpontuacaototal() < menor ) {
								menor = x.getpontuacaototal();
								indice = contador;
							}
						}
			            contador++;
					}
					if(indice > -1)
					{
						Resultados.remove(indice);			 
				    }
				}
				return Resultados;
			}

			/***************************************************************/
}











